From 853e51aa53d72b48fca8332eb50b04fafd0e2a67 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Fri, 4 Aug 2006 09:15:51 -0600 Subject: [PATCH] [IA64] SMP Windows is up on VTI domain This patch makes SMP Windows boot, Rewrite global purge to support multiple page size. Signed-off-by: Anthony Xu --- xen/arch/ia64/vmx/vmmu.c | 10 +++++++--- xen/arch/ia64/vmx/vmx_vcpu.c | 4 +--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/xen/arch/ia64/vmx/vmmu.c b/xen/arch/ia64/vmx/vmmu.c index d8022930f2..876438a399 100644 --- a/xen/arch/ia64/vmx/vmmu.c +++ b/xen/arch/ia64/vmx/vmmu.c @@ -528,19 +528,23 @@ struct ptc_ga_args { static void ptc_ga_remote_func (void *varg) { - u64 oldrid, moldrid, mpta; + u64 oldrid, moldrid, mpta, oldpsbits, vadr; struct ptc_ga_args *args = (struct ptc_ga_args *)varg; VCPU *v = args->vcpu; + vadr = args->vadr; oldrid = VMX(v, vrr[0]); VMX(v, vrr[0]) = args->rid; + oldpsbits = VMX(v, psbits[0]); + VMX(v, psbits[0]) = VMX(v, psbits[REGION_NUMBER(vadr)]); moldrid = ia64_get_rr(0x0); ia64_set_rr(0x0,vrrtomrr(v,args->rid)); mpta = ia64_get_pta(); ia64_set_pta(v->arch.arch_vmx.mpta&(~1)); ia64_srlz_d(); - vmx_vcpu_ptc_l(v, args->vadr, args->ps); + vmx_vcpu_ptc_l(v, REGION_OFFSET(vadr), args->ps); VMX(v, vrr[0]) = oldrid; + VMX(v, psbits[0]) = oldpsbits; ia64_set_rr(0x0,moldrid); ia64_set_pta(mpta); ia64_dv_serialize_data(); @@ -554,7 +558,7 @@ IA64FAULT vmx_vcpu_ptc_ga(VCPU *vcpu,UINT64 va,UINT64 ps) struct vcpu *v; struct ptc_ga_args args; - args.vadr = va<<3>>3; + args.vadr = va; vcpu_get_rr(vcpu, va, &args.rid); args.ps = ps; for_each_vcpu (d, v) { diff --git a/xen/arch/ia64/vmx/vmx_vcpu.c b/xen/arch/ia64/vmx/vmx_vcpu.c index 15e0053b4d..313c16cbd6 100644 --- a/xen/arch/ia64/vmx/vmx_vcpu.c +++ b/xen/arch/ia64/vmx/vmx_vcpu.c @@ -202,9 +202,7 @@ IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, UINT64 reg, UINT64 val) newrr.rrval=val; if (newrr.rid >= (1 << vcpu->domain->arch.rid_bits)) panic_domain (NULL, "use of invalid rid %x\n", newrr.rid); - if(oldrr.ps!=newrr.ps){ - thash_purge_all(vcpu); - } + VMX(vcpu,vrr[reg>>61]) = val; switch((u64)(reg>>61)) { case VRN7: -- 2.30.2